package com.lekang.service;

import java.util.List;
import com.lekang.domain.Bill;
import com.lekang.dto.AddBillDto;

/**
 * 账单Service接口
 * 
 * @author ruoyi
 * @date 2025-10-15
 */
public interface IBillService 
{
    /**
     * 查询账单
     * 
     * @param id 账单主键
     * @return 账单
     */
    public Bill selectBillById(Long id);

    /**
     * 查询账单列表
     * 
     * @param bill 账单
     * @return 账单集合
     */
    public List<Bill> selectBillList(Bill bill);

    /**
     * 新增账单
     * 
     * @param bill 账单
     * @return 结果
     */
    public int insertBill(Bill bill);

    /**
     * 修改账单
     * 
     * @param bill 账单
     * @return 结果
     */
    public int updateBill(Bill bill);

    /**
     * 批量删除账单
     * 
     * @param ids 需要删除的账单主键集合
     * @return 结果
     */
    public int deleteBillByIds(Long[] ids);

    /**
     * 删除账单信息
     * 
     * @param id 账单主键
     * @return 结果
     */
    public int deleteBillById(Long id);

    // 新增：根据老人ID查询该老人的所有账单
    public List<Bill> selectBillListByElderlyId(Long elderlyId);
    // 新增：一对多新增账单（主表+详情表）
    public boolean addBillWithDetails(AddBillDto addBillDto);

    // 新增月费账单：一对多新增账单（主表+详情表）
    public boolean addBillWithBillDetails(AddBillDto addBillDto,String isAuto);
    /**
     * 修改账单状态
     * @param bill 含id和transactionStatus的实体
     * @return 是否成功
     */
    public String updateBillStatus(Bill bill);

    /**
     * 根据订单生成费用账单
     *
     * @param orderId 订单ID
     * @return 结果
     */
    public boolean generateBillForOrder(Long orderId);

    /**
     * 根据订单状态更新关联的费用账单状态
     *
     * @param orderNo 订单编号
     * @param orderStatus 订单状态
     * @return 结果
     */
    public boolean updateBillStatusByOrderStatus(String orderNo, Long orderStatus);
}
